/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controlador;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import model.AlgoritmoLaberinto;
import model.Laberinto;
import model.LaberintoPredefinido;

/**
 *
 * @author ArandiLopez
 */
public class ControlLaberinto {

    private Laberinto laberinto;
    private LaberintoPredefinido laberintoPredefinido;
    private AlgoritmoLaberinto algoritmoLaberinto;

    /**
     * Constructor
     */
    public ControlLaberinto() {
        laberinto = new Laberinto();
        laberintoPredefinido = new LaberintoPredefinido();
        
    }

    /**
     *
     * @return Objeto Laberinto Predefinido
     */
    public LaberintoPredefinido getLaberintoPredefinido() {
        return laberintoPredefinido;
    }

    /**
     *
     * @param laberintoPredefinido
     */
    public void setLaberintoPredefinido(LaberintoPredefinido laberintoPredefinido) {
        this.laberintoPredefinido = laberintoPredefinido;
    }

    /**
     *
     * @return Objeto Laberinto
     */
    public Laberinto getLaberinto() {
        return laberinto;
    }

    /**
     *
     * @param laberinto
     */
    public void setLaberinto(Laberinto laberinto) {
        this.laberinto = laberinto;
    }

    /**
     * Crea un laberinto aleatorio.
     *
     * @param matrix Matriz de Labels.
     */
    public void crearMatrixAleatorio(JLabel[][] matrix) {
        for (int i = 0; i < Laberinto.FILAS; i++) {
            for (int j = 0; j < Laberinto.COLUMNAS; j++) {
                if (laberinto.getMaze()[i][j]) {
                    matrix[i][j].setIcon(new ImageIcon("N.png"));
                } else {
                    matrix[i][j].setIcon(new ImageIcon("W.png"));
                }
            }
        }
        matrix[1][1].setIcon(new ImageIcon("E.png"));
        matrix[Laberinto.FILAS - 2][Laberinto.COLUMNAS - 2].setIcon(new ImageIcon("E.png"));
    }

    /**
     * Crear un laberinto dependiendo del nivel dado.
     *
     * @param matrix
     * @param nivel
     */
    public void crearMatrizPredefinido(JLabel[][] matrix) {
        for (int i = 0; i < Laberinto.FILAS; i++) {
            for (int j = 0; j < Laberinto.COLUMNAS; j++) {
                if (laberintoPredefinido.matrizPredeterminada()[i][j]) {
                    matrix[i][j].setIcon(new ImageIcon("N.png"));
                } else {
                    matrix[i][j].setIcon(new ImageIcon("W.png"));
                }
            }
        }
        matrix[1][1].setIcon(new ImageIcon("E.png"));
        matrix[Laberinto.FILAS - 2][Laberinto.COLUMNAS - 2].setIcon(new ImageIcon("E.png"));
    }
    
    public void controlCaminoAleatorio(){
        
        algoritmoLaberinto = new AlgoritmoLaberinto(laberinto.getMaze());
        
        try {
            algoritmoLaberinto.camino();
        } catch (Exception ex) {
            System.err.println("Camino Invalido");
        }
    }
    
    public void controlCaminoPredefinido(){
        algoritmoLaberinto = new AlgoritmoLaberinto(laberintoPredefinido.matrizPredeterminada());
        try {
            algoritmoLaberinto.camino();
        } catch (Exception ex) {
            System.err.println("Camino Invalido");
        }
    }
    
    public static void main(String[] args) {
     ControlLaberinto   control = new ControlLaberinto();
     control.controlCaminoAleatorio();
    } 
    
}//fin de la clase
